// 进度条实现文件
//#include "progressbar.h"

//#define STYLE '='
//void progress_bar1()
//{
//	// 1个用于存 \0
//	char buff[101];
//	//都设置成 0 , 因为 0 打印出来才不显示
//	memset(buff,0,sizeof(buff));
//	
//	//光标旋转字符串 
//	//这里 \\ 是转义字符, 
//	char st[] = "/-\\";
//	int len = strlen(st); // 求字符串的长度 , 后续必须循环打印 	
//	int cns = 0;
//	//进度条是 0  -  100 
//	while(cns <= 100)
//	{	
//
//		int id = cns % len; // 要循环打印 /-\ ,所以只能取数组 st 的 0 ,1 , 2元素 ,取模就可以达到回退 100 % 3 = 1 这样的效果 
//
//		// 打印 buff , 一个100个字符 , 左对齐 100 宽度
//		// 要求覆盖式显示
//		// %% , 涉及转义字符 , 两个 % 显示的是一个 % 
//		printf("[%-100s][%d%%][%c]\r", buff,cns, st[id]);
//		//刷新缓冲区 ,让其快速在显示器上显示
//		fflush(stdout);
//		// 每加一个 , 就加一个字符 
//		buff[cns] += STYLE;
//		cns++;
//		// usleep -- 显示的是微秒 , 1000 微秒 = 1ms 
//		usleep(60000);
//	}	
//	printf("\n");
//}



////////// 正式版本 

 
#include "progressbar.h"
#define STYLE '='

//自动填充
void progressbar(double total , double cur)
{
	char buff[101];
	memset(buff , 0 , sizeof(buff));
	//光标
	char st[] = "/-\\";
	int len = strlen(st);

	//当前填充几个字符 
	// cur 可能是 0.3 1.几 等 --- 1024 这样的浮点数 
	//计算填充数 , 假如当前是 1.1 , 即填充1个 , 1100 / 1000 
	int num = (int)(cur*100 / total);
	for(int i = 0; i < num; ++i)
	{
		buff[i] += STYLE;
	}
	//下载速率 , 即下载了百分之几 
	double rate = cur / total;
	//调用本函数的次数
	static int ans = 0; // 用于计算光标位置  
	ans %= len;
	printf("[%-100s][%.2lf%%][%c]\r",buff,rate*100,st[ans]);
	usleep(4000);
	ans++;
	fflush(stdout);
}
